思路:通过拿到字符串数组中最短的字符串数据,然后把所有的可能性字符串保存到一个集合中进行比较,然后返回其中一个字符长度最长的结果。
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) return "";
int length = strs.length;
//拿到字符串数组中最短的字符串做比较,因为字符串长度影响比较次数
int minLength = strs[0].length();
String minStr = strs[0];
for (int i = 1; i < length; i++) {
if (strs[i].length() < minLength) {
minStr = strs[i];
minLength = strs[i].length();
}
}
//字符串截取,拿到所以可能的字符串,用于比较
ArrayList<String> list = new ArrayList<>();
for (int i = 1; i <= minLength; i++) {
String substring = minStr.substring(0, i + 0);
if(!list.contains(substring)) {
list.add(substring);
}
}
//比较字符串中是否存在以某个字符串开头的数据
//如果某个字符串在数组所有的数据中都存在,并将长度是最大的返回
String result="";
for (int i=0;i<list.size();i++){
for(int j=0;j<strs.length;j++){
String str = strs[j];
String currStr = list.get(i);
if(!str.startsWith(currStr)){
break;
}else if(j==length-1 ){
if(result.length()<currStr.length()){
result = currStr;
}
}
}
}
return result;
}